package com.yupi.yuoj.model.dto.question;

/**
 * @Classname QuestionEsDTO
 * @Description 题目ES包装类
 * @Date 2025/10/2 14:58
 * @Created by 李胜
 */
import java.io.Serializable;
import java.util.Date;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

/**
 * 题目 ES 包装类
 **/
@Document(indexName = "question") // 指定索引名称
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class QuestionEsDTO implements Serializable {

    private static final String DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";

    /**
     * id
     */
    @Id
    private Long id;

    /**
     * 标题
     */
    @Field(type = FieldType.Text, analyzer = "ik_max_word") // 使用 ik 分词器
    private String title;

    /**
     * 内容
     */
    @Field(type = FieldType.Text, analyzer = "ik_max_word")
    private String content;

    /**
     * 标签列表
     */
    @Field(type = FieldType.Keyword) // 标签是关键字，不分词
    private List<String> tags;

    /**
     * 创建用户 id
     */
    @Field(type = FieldType.Long)
    private Long userId;

    /**
     * 创建时间
     */
    @Field(type = FieldType.Date, format = {}, pattern = DATE_TIME_FORMAT)
    private Date createTime;

    /**
     * 更新时间
     */
    @Field(type = FieldType.Date, format = {}, pattern = DATE_TIME_FORMAT)
    private Date updateTime;

    // 注意：我们将 MySQL 中的 tags (JSON 字符串) 转换为了 List<String>
    // 其他如 submitNum, acceptedNum, thumbNum, favourNum 等也可以按需添加，通常作为数值类型

    private static final long serialVersionUID = 1L;
}